
package mx.edu.itschapala.sistemas.septimo.control;

import java.io.*;
import java.util.*;
import  mx.edu.itschapala.sistemas.septimo.modelo.*;
import mx.edu.itschapala.sistemas.septimo.vista.enumeracion.TipoBusqueda;
import static mx.edu.itschapala.sistemas.septimo.vista.enumeracion.TipoBusqueda.CONTIENE;
import static mx.edu.itschapala.sistemas.septimo.vista.enumeracion.TipoBusqueda.INICIAR;


public class ProductoLnArchivo implements ProductoLnLocal{

private List<Producto> lista = new ArrayList<Producto>();
private Producto producto;

    public void registrar(Producto producto){
        try {
            FileOutputStream file = new FileOutputStream("producto.txt",true);
            ObjectOutputStream out = new ObjectOutputStream(file);
            lista.add(producto);
            out.writeObject(producto);
            out.close();
        } catch (Exception e) {
                System.out.println("Error en el archivo");
        }
    }
    public void modificar(Producto producto){
       lista= new ArrayList<Producto>();
               
        try {
                FileInputStream file = new FileInputStream("producto.txt");
           ObjectInputStream in = new ObjectInputStream(file);
            Object o =  in.readObject();
            while (o!=null) {
               lista.add((Producto)o);
               o=in.readObject();
                
            }
            
        } catch (Exception e) {
        } 
        Producto alex =null;
for (Producto p : lista ) {
		
		if(p.getCodigo()==producto.getCodigo()){
	
	alex = p;
	break;
		}
	


	}

	lista.set(lista.indexOf(alex),producto);
        
        
        
        
        
    }
    public void eliminar(Producto producto){
                        lista= new ArrayList<Producto>();
               
        try {
                FileInputStream file = new FileInputStream("producto.txt");
           ObjectInputStream in = new ObjectInputStream(file);
            Object o =  in.readObject();
            while (o!=null) {
               lista.add((Producto)o);
               o=in.readObject();
                
            }
            
        } catch (Exception e) {
        } 
         for (Producto p: lista){

 	if(p.getCodigo()==producto.getCodigo()){
 		producto=p;
}
  
		lista.remove(producto);

}
    }
    public Producto buscarPorCodigo(int codigo){
                lista= new ArrayList<Producto>();
               
        try {
                FileInputStream file = new FileInputStream("producto.txt");
           ObjectInputStream in = new ObjectInputStream(file);
            Object o =  in.readObject();
            while (o!=null) {
               lista.add((Producto)o);
               o=in.readObject();
                
            }
            
        } catch (Exception e) {
        } 
        for (Producto p : lista ) {
		
		if(p.getCodigo()==codigo){
	producto = p;
	break;
		}
		
	}

 return producto;
   

            }
    public List<Producto> getTodos(){
        lista= new ArrayList<Producto>();
        try {
                FileInputStream file = new FileInputStream("producto.txt");
           ObjectInputStream in = new ObjectInputStream(file);
            Object o =  in.readObject();
            while (o!=null) {
               lista.add((Producto)o);
               o=in.readObject();
                
            }
            
        } catch (Exception e) {
        } 
    return lista ;
            }

    
    public List<Producto> getPorNombre(String Nombre, TipoBusqueda Criterio) {
         List<Producto> tmp = new ArrayList<Producto>();
        switch (Criterio) {
            case INICIAR:
                for (Producto p : lista) {
                    if (p.getNombre().startsWith(Nombre)) {
                        tmp.add(p);
                    }
                }
                break;
            case CONTIENE:
                for (Producto p : lista) {
                    if (p.getNombre().startsWith(Nombre)) {
                        tmp.add(p);
                    }
                }
                break;

        }
        return tmp;
    }

    
    
    
    
}